import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import UIAbility from '@ohos.app.ability.UIAbility';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
import Logger from '../common/utils/Logger';

/**
 * 定义个简单的 UIAbility
 */
export default class FuncAbility extends UIAbility {
  private readonly TAG: string = 'FuncAbility';

  /**
   * 首次启动
   * @param want
   * @param launchParam
   */
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    Logger.info(this.TAG, 'onCreate -> ' + JSON.stringify(want))
    // 接收调用方UIAbility传过来的参数,赋值给ArkTS引擎实例下的全局对象 globalThis
    // 注意，如果其他的 UIAbility 实例对象中已经给相同的 globalThis 属性赋值，会被这里覆盖掉
    globalThis.wantInfo = want;
    globalThis.launchParam = launchParam;
    // 注意：这里的应用上下文如果使用 globalThis.context 将会覆盖 EntryAbility 中给 globalThis.context 的赋值结果
    globalThis.funcAbilityContext = this.context;
  }

  /**
   * 非首次启动，由于当前UIAbility实例之前已经创建完成，此时会进入UIAbility的onNewWant()回调中且不会进入onCreate()和onWindowStageCreate()生命周期回调
   */
  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) {
    Logger.info(this.TAG, 'onNewWant -> ' + JSON.stringify(want))
    globalThis.wantInfo = want;
    globalThis.launchParam = launchParam;
  }

  onWindowStageCreate(windowStage: window.WindowStage) {
    Logger.info(this.TAG, 'onWindowStageCreate')

    windowStage.loadContent('pages/Redirect')
  }

  onDestroy() {
    Logger.info(this.TAG, 'onDestroy')
    // 当 FuncAbility 被销毁时，释放 globalThis 中相应属性所占资源
    // 注意：如果其他 UIAbility 实例中也用到了相同属性，则有可能引起异常。因此这里应当只释放本 UIAbility 实例中使用的属性。
    globalThis.wantInfo = null;
    globalThis.launchParam = null;
    globalThis.funcAbilityContext = null;
  }
}